package me.spring.cloud.common.components.util.net;

import static java.util.regex.Pattern.compile;

import me.spring.cloud.common.components.util.lang.StringUtil;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author luffy
 * @description: 域名工具类
 * @date 2019-08-01 17:44
 */
public class DomainUtil {

  /** 主域名 */
  private static Pattern main_domain_p = compile(
      "(?<=http://|\\.)[^.]*?\\.(ac.cn|bj.cn|sh.cn|tj.cn|cq.cn|he.cn|sn.cn|sx.cn|nm.cn|ln.cn|jl.cn|hl.cn|js.cn|zj.cn|ah.cn|"
          + "fj.cn|jx.cn|sd.cn|ha.cn|hb.cn|hn.cn|gd.cn|gx.cn|hi.cn|sc.cn|gz.cn|yn.cn|gs.cn|qh.cn|nx.cn|xj.cn|tw.cn|hk.cn|mo.cn|xz.cn"
          + "|com.cn|net.cn|org.cn|gov.cn|.com.hk|我爱你|在线|中国|网址|网店|中文网|公司|网络|集团"
          + "|com|cn|cc|org|net|xin|xyz|vip|shop|top|club|wang|fun|info|online|tech|store|site|ltd|ink|biz|group|link|work|pro|mobi|ren|kim|name|tv|red"
          + "|cool|team|live|pub|company|zone|today|video|art|chat|gold|guru|show|life|love|email|fund|city|plus|design|social|center|world|auto|.rip|.ceo|.sale|.hk|.io|.gg|.tm|.gs|.us)$",
      Pattern.CASE_INSENSITIVE);

  /** 非主域名 */
  //private static Pattern domain_p_ = compile("[^//][a-zA-Z0-9]{0,62}(\\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62}|(:[0-9]{1,4}))+\\.?",
  private static Pattern domain_p_ = compile("[^//][a-zA-Z0-9][-_a-zA-Z0-9]{0,62}(\\.[a-zA-Z0-9][-_a-zA-Z0-9]{0,62})+\\.?",
      Pattern.CASE_INSENSITIVE);

  /** 非主域名 */
  private static Pattern domain_p = compile("[^//]*?\\.(ac.cn|bj.cn|sh.cn|tj.cn|cq.cn|he.cn|sn.cn|sx.cn|nm.cn|ln.cn|jl.cn|hl.cn|js.cn|zj.cn|ah.cn|"
          + "fj.cn|jx.cn|sd.cn|ha.cn|hb.cn|hn.cn|gd.cn|gx.cn|hi.cn|sc.cn|gz.cn|yn.cn|gs.cn|qh.cn|nx.cn|xj.cn|tw.cn|hk.cn|mo.cn|xz.cn"
          + "|com.cn|net.cn|org.cn|gov.cn|.com.hk|我爱你|在线|中国|网址|网店|中文网|公司|网络|集团"
          + "|com|cn|cc|org|net|xin|xyz|vip|shop|top|club|wang|fun|info|online|tech|store|site|ltd|ink|biz|group|link|work|pro|mobi|ren|kim|name|tv|red"
          + "|cool|team|live|pub|company|zone|today|video|art|chat|gold|guru|show|life|love|email|fund|city|plus|design|social|center|world|auto|.rip|.ceo|.sale|.hk|.io|.gg|.tm|.gs|.us)$",
      Pattern.CASE_INSENSITIVE);

  /**
   * @param url
   * @Return java.lang.String
   * @Author luffy
   * @Description 获取主域名(一级域名)
   * @Date 2019-08-01 18:22
   */
  public static String getMainDomain(String url) {
    Matcher matcher = main_domain_p.matcher(url);
    return matcher.find() ? matcher.group() : null;
  }


  /**
   * @param url
   * @Return java.lang.String
   * @Author luffy
   * @Description 获取域名(非一级域名)
   * @Date 2019-08-01 18:23
   */
  public static String getDomain(String url) {
    Matcher matcher = domain_p_.matcher(url);
    return matcher.find() ? matcher.group() : null;
  }

  /**
   * @Author luffy
   * @Description 判断是否是域名
   * @Param host
   * @Return boolean 
   * @Date 2019-09-20 11:40
  */
  public static boolean isDomain(String host){
    String domain = getDomain(host);
    if(StringUtil.isEmpty(domain)){
      return false;
    }
    if(domain.equals(host)) {
      return true;
    }
    return false;
  }

  /**
   * @Author luffy
   * @Description 判断是否有域名
   * @Param url
   * @Return boolean
   * @Date 2019-09-20 11:41
  */
  public static boolean isHasDomain(String url){
    String domain = getDomain(url);
    if(StringUtil.isEmpty(domain)){
      return false;
    }
    return true;
  }
}
